var LYTableView = function () {
	var self = this;
//数据属性
	//组数
	self.numberOfSections = 1;
	//tableview的高度
	self.LYHeight = 0;
	//tableview的宽度
	self.LYWidth = 0;
	//预估高度
	self.predict = 50;
	
//内部属性
	//用于保存回收的cell
	var recycleArray = new Array(); 
	//数组保存当前显示的cell
	var showCellArray = new Array();
	//记录第一个cell的位置  下部
	var oneCell = 0; 
	//记录第一个cell的高度 
	var oneCellLYHeight = 0;
	//记录最后一个cell的位置   上部
	var lastCell = 0;
	//记录最后一个cell的高度
	var lastCellLYHeight = 0;
	//保存创建出来的tableview
	var tableView;
	//保存创建出来的承载view
	var view;
	//溢出量
	var overflow = 100;
	//tableview的滑动范围
	var scrollHeight = 0;
	//保存第一个显示cell的id
	var oneCellID = -1;
	var lastCellID = 0;
//外界调用接口
	//行数 返回行数
	self.numberOfRow = function () {return 0};
	//cell的回调 返回cell
	self.CellForRowAt = function () {}
	//初始化
	self.init = function () {
		//初始化一些设置 
		//创建tableView
		return self.tableView();
	}
	
//创建控件
	
	//创建tableView
	self.tableView = function () {
		var div = $('<div></div>');
		div.css('overflow', 'scroll')
		var tab = $('<ul></ul>').addClass("mui-table-view").appendTo(div);
		//table的位置
		div.css({
			height: self.LYHeight,
			width: self.LYWidth,
			top: 0,
			left: 0,
		})
		//根据行数添加cell
		tableView = div;
		view = tab;
		var row = self.numberOfRow()
		//预估cell的高度
		for (var i = 0; i < row; i ++) {
			
			//计算cell的高度范围
			if (self.predict == 0) {
				var cell = new LYTableViewCell();
				//添加数据 cell内容的回调
				cell.cellView.html(self.CellForRowAt(i))
				//拿到cell的高度
				var heigt = cell.cellView.height();
				scrollHeight +=  heigt;
			} else {
				scrollHeight = row * self.predict;
			}

			//超出屏幕就不在创建
			if (lastCell < self.LYHeight + overflow) {
				//添加cell
				self.addTableViewCell(0);
			} else{
				
			}
	
		}	
		//设置滑动范围
		view.height(scrollHeight);

		//监听滑动
		self.scrollTableView(tableView) 
		return div;	 
	}
	
	//根据id获取cell的高度
	function cellHeight() {
		//判断是否有保存高度
		
	}



	//给cell添加数据  、、判断重用   列表滑动方向 向下1向上0
	self.addTableViewCell = function (direction) {
		//向回收池拿取cell
		var cell = recycleArray.pop();
		if (cell == null) {
			cell = new LYTableViewCell();
		}
		//拿到cell的高度
//		cell.cellLYHeight = cell.cellView.height();
		cell.cellLYHeight = 50;
		//设置cell的高度
		cell.viewCell.height(cell.cellLYHeight)
//		console.log(cell.cellLYHeight)
		var id = 0;
		//判断方向
		if (direction == 0 && lastCellID < self.numberOfRow()) {
			//添加到tableview 加尾部            设置位置    采用移除方案 
			cell.viewCell.appendTo(view);
			showCellArray.push(cell)
			//记录高度
			lastCellLYHeight = cell.cellLYHeight
			cell.viewCell.css('top', lastCell);//cell的位置
			//记录位置 最后一个
			lastCell += cell.cellLYHeight; 
			lastAdd = 1;
			console.log(lastCell)
//			console.log(lastCellID)
			//拿取对应的id
			id = lastCellID ++;
			console.log(id)
			//添加数据 cell内容的回调 
			cell.cellView.html(self.CellForRowAt(id))
		} else if (oneCellID > -1){
			//添加到tableview 加头部   设置位置
//			console.log(oneCellID)
			view.prepend(cell.viewCell);
			showCellArray.unshift(cell);  
			//记录高度
			oneCellLYHeight = cell.cellLYHeight 
			oneCell -= 50;  
//			console.log(oneCell)
			cell.viewCell.css('top', oneCell);//cell的位置
			//记录位置	
			id = oneCellID --;
			console.log(id)
			//添加数据 cell内容的回调 
			cell.cellView.html(self.CellForRowAt(id))
		}	   
		
	}
	
	//移出cell    列表滑动方向 向下1向上0   问题
	/*
	self.removeTableViewCell = function (direction) {
		//判断方向
		if (direction == 0) {
			//移出显示的第一个元素
			oneCellID ++;
			var cell = showCellArray.shift()//从显示界面移出
            oneCell += 50;  
            topRemove = 1;
 			recycleArray.push(cell);//放入缓存池
 			
		} else{
			//移出显示的最后个元素
			var cell = showCellArray.pop()
			recycleArray.push(cell);//放入缓存池
			lastCell -= cell.cellLYHeight;
			lastRemove = 1;
			lastCellID --;	
		}
	}
	*/
	
//监听滑动
	//保存上一次滑动位置
	var lastScroll = 0;
	self.scrollTableView = function (tableView) {
		tableView.scroll(function () {
			//拿到便宜量
			var scroll = tableView.scrollTop();
			//判断上划还是下滑 
			var direction = scroll - lastScroll
			lastScroll = scroll;
			if (direction > 0) {//向下移动
				self.calculationsCellShow(1, scroll)
			}else if (direction < 0) {//向上移动
				self.calculationsCellShow(0, scroll)
			} 
				
		})
	}
	//需要解决任务重复的问题
	//计算是否有cell离开屏幕  列表滑动方向 向下1向上0
	self.calculationsCellShow = function (direction, scroll) {
		//判断上划还是下滑
		if (direction == 0) {//向下移动
			//判断是有cell移出 
//			console.log('向下滑动')
			if (scroll < lastCell - self.LYHeight - overflow) {//下部有溢出
				//移出显示的最后个元素
				var cell = showCellArray.pop()//从显示界面移出
				cell.cellView.html('') //清空内容
				recycleArray.push(cell);//放入缓存池
				lastCell -= cell.cellLYHeight;
				lastRemove = 1;
				lastCellID --;
				console.log(lastCellID)
			} 
			//是有加入
			if (scroll < oneCell + overflow) {//上部有加入  
				self.addTableViewCell(1);
			}
	 
		} else if (direction == 1) {//向上移动
			//判断是有cell移出
//			console.log('向上滑动')
			if (scroll > oneCell + overflow) {//上部有溢出  问题
				//移出显示的第一个元素
				var cell = showCellArray.shift()//从显示界面移出
				cell.cellView.html('') //清空内容
	 			recycleArray.push(cell);//放入缓存池
	 			oneCell += cell.cellLYHeight; 
				oneCellID ++;
//				console.log(oneCellID)
			} 
			//是有加入
			if (scroll > lastCell - overflow - self.LYHeight) {//下部有加入  ok
//				console.log(lastCellID)
				self.addTableViewCell(0); 
			}
		}
	}
	
//返回
//	return self.view();
}

//cell对象
var LYTableViewCell = function () {
	
	var self = this;
	//cell的内容
	self.cellView = null;
	//保存cell的高度
	self.cellLYHeight = 0;
	//保存cell的top
	self.cellLYTop = 0
	//保存cell
	self.viewCell = null;
	//创建cell对象
	self.setUpTableViewCell = function () {

		var li = $('<li></li>').addClass("mui-table-view-cell0");
		li.css({
			"position": "absolute",
			height: self.cellLYHeight,
			width: '100%',
			top: self.cellLYTop,
			left: 0,
//			'background-color': '#0062CC',
		})
		var a = $('<a></a>').appendTo(li);
		a.css({"position": "absolute"})
//		a.addClass("mui-navigate-right");//向右的箭头
//		console.log('真的在创建')
		//调用
		self.cellView = a;
		self.viewCell = li;
		return li;
	};
	self.setUpTableViewCell();
//	return self.setUpTableViewCell();
}
